import { createApp } from 'vue';

import Cookies from 'js-cookie';

import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
import locale from 'element-plus/es/locale/lang/zh-cn';
import '@/assets/styles/index.scss'; // global css
import '@/assets/styles/custom.css'; // 自定义样式
import '@/assets/styles/global.scss'; // 引入全局样式
import App from './App';
import store from './store';
import router from './router';
import directive from './directive'; // directive
import './assets/icons/iconfont.css';
// 全局zy、xktype
import common from '@/modules';
const { ZY_TYPE, XK_TYPE } = common;
// 注册指令
import plugins from './plugins'; // plugins
import { download } from '@/utils/request';
import ProcessedImage from '@/components/ProcessedImage/index.vue';
// svg图标
import 'virtual:svg-icons-register';
import SvgIcon from '@/components/SvgIcon';
import elementIcons from '@/components/SvgIcon/svgicon';

import './permission'; // permission control
import { ElSelect, ElDatePicker } from 'element-plus';

// 创建 Popper.js 的默认配置
const createPopperOptions = () => ({
  modifiers: [
    {
      name: 'computeStyles',
      options: {
        adaptive: false, // 禁用自适应
        gpuAcceleration: false, // 禁用 GPU 加速，避免 transform 导致的问题
      },
    },
  ],
});

// 设置 ElSelect 和 ElDatePicker 的 popperOptions
ElSelect.props.popperOptions.default = createPopperOptions;
ElDatePicker.props.popperOptions.default = createPopperOptions;
import { useDict } from '@/utils/dict';
import {
  parseTime,
  resetForm,
  addDateRange,
  handleTree,
  selectDictLabel,
  selectDictLabels,
} from '@/utils/ruoyi';

// 拖动插件
import Draggable from 'vuedraggable';
import VueClipboard from 'vue3-clipboard';

// 分页组件
import Pagination from '@/components/Pagination';
// 自定义表格工具组件
import RightToolbar from '@/components/RightToolbar';
// 富文本组件
import Editor from '@/components/Editor';
// 文件上传组件
import FileUpload from '@/components/FileUpload';
// 图片上传七牛组件
import ImageUpload from '@/components/ImageUpload';
// 图片上传后台组件
import ImageUploadNew from '@/components/ImageUploadNew';
// 图片预览组件
import ImagePreview from '@/components/ImagePreview';
// 自定义树选择组件
import TreeSelect from '@/components/TreeSelect';
// 字典标签组件
import DictTag from '@/components/DictTag';
// import { createPopper } from "@popperjs/core";
// UEditor
import VueUeditorWrap from 'vue-ueditor-wrap';
// 富文本组件
import UEditorPlus from '@/components/UEditorPlus';
// 权限列表组件
import PermissionsList from '@/components/PermissionsList';
import 'default-passive-events';
const app = createApp(App);
// 全局方法挂载
app.config.globalProperties.useDict = useDict;
app.config.globalProperties.download = download;
app.config.globalProperties.parseTime = parseTime;
app.config.globalProperties.resetForm = resetForm;
app.config.globalProperties.handleTree = handleTree;
app.config.globalProperties.addDateRange = addDateRange;
app.config.globalProperties.selectDictLabel = selectDictLabel;
app.config.globalProperties.selectDictLabels = selectDictLabels;
app.config.globalProperties.$XK_TYPE = XK_TYPE;
app.config.globalProperties.$ZY_TYPE = ZY_TYPE;

// 全局组件挂载
app.component('DictTag', DictTag);
app.component('Pagination', Pagination);
app.component('TreeSelect', TreeSelect);
app.component('FileUpload', FileUpload);
app.component('ImageUpload', ImageUpload);
app.component('ImageUploadNew', ImageUploadNew);
app.component('ImagePreview', ImagePreview);
app.component('RightToolbar', RightToolbar);
app.component('Editor', Editor);
app.component('UEditorPlus', UEditorPlus);
app.component('PermissionsList', PermissionsList);
app.component('ProcessedImage', ProcessedImage);
app.component('Draggable', Draggable);

app.component('VueUeditorWrap', VueUeditorWrap);

app.use(router);
app.use(store);
app.use(plugins);
app.use(elementIcons);
app.component('svg-icon', SvgIcon);

directive(app);

// 使用element-plus 并且设置全局的大小
app.use(ElementPlus, {
  locale: locale,
  // 支持 large、default、small
  size: Cookies.get('size') || 'default',
});
app.use(VueClipboard, {
  autoSetContainer: true,
  appendToBody: true,
});

app.mount('#app');
